import axios from 'axios'
import { ElMessage } from 'element-plus'

// 创建axios实例
const service = axios.create({
    baseURL: 'http://localhost:8080', // api的base_url
    timeout: 5000, // 请求超时时间
    headers: {
        'Content-Type': 'application/json;charset=utf-8'
    },
    withCredentials: true // 允许跨域请求携带cookie
})

// 请求拦截器
service.interceptors.request.use(
    config => {
        // 不需要手动添加认证信息，浏览器会自动发送cookie
        return config
    },
    error => {
        // 对请求错误做些什么
        console.error('请求错误：', error)
        return Promise.reject(error)
    }
)

// 响应拦截器
service.interceptors.response.use(
    response => {
        const res = response.data
        // 根据自定义错误码判断请求是否成功
        console.log(res)
        if (res.code === 0 || res.message === 'ok') {
            return res
        } else {
            // 处理业务错误
            ElMessage.error(res.message || '请求失败')
            return Promise.reject(new Error(res.message || '请求失败'))
        }
    },
    error => {
        // 处理 HTTP 网络错误
        let message = '网络错误'
        if (error.response) {
            switch (error.response.status) {
                case 401:
                    message = '未授权，请重新登录'
                    // 可以在这里处理登出逻辑
                    localStorage.removeItem('userInfo')
                    window.location.href = '/login'
                    break
                case 403:
                    message = '拒绝访问'
                    break
                case 404:
                    message = '请求错误，未找到该资源'
                    break
                case 500:
                    message = '服务器错误'
                    break
                default:
                    message = `连接错误${error.response.status}`
            }
        }
        ElMessage.error(message)
        return Promise.reject(error)
    }
)

// 封装GET请求
export function get(url, params) {
    return service({
        url,
        method: 'get',
        params
    })
}

// 封装POST请求
export function post(url, data) {
    return service({
        url,
        method: 'post',
        data
    })
}

// 封装PUT请求
export function put(url, data) {
    return service({
        url,
        method: 'put',
        data
    })
}

// 封装DELETE请求
export function del(url, params) {
    return service({
        url,
        method: 'delete',
        params
    })
}

export default service
